// PROGRAMA : SCRPRA01
// BIBLIOTECA : SISP
// SISTEMA : SISP - SISTEMA DE INFORMACOES DE SEGURANCA PUBLICA
// IDENTIFICACAO CRIMINAL
// CLIENTE : SSP - SECRETARIA DE SEGURANCA PUBLICA
// INSTITUTO DE IDENT.
// OBJETIVO : EMISSAO DA FOLHA DE ANTECEDENTES CRIMINAIS
// DATA : 23 DE MARCO DE 2006
// ALTERACAO
package br.com.vti.sisp_sicrim.antigo.controller.programa;

import java.io.FileNotFoundException;
import java.text.ParseException;

import net.sf.jasperreports.engine.JRException;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.interceptor.download.InputStreamDownload;
import br.com.vti.sisp_sicrim.antigo.controller.relatorios.Scrpra01Report;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Scrpra01A;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Scrpra01B;
import br.com.vti.sisp_sicrim.antigo.model.SicCadastro;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Scrg001;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Scrpra01 OBJETIVO : EMISSAO DA FOLHA DE ANTECEDENTES CRIMINAIS *
 * 
 * @author Incode - Data: mai/2014
 * 
 */
@Resource
@Path("/antigo/scrpra01")
public class Scrpra01 {
	// Views utilizadas
	SicCadastro criminalView = new SicCadastro();
	// Telas/relatorios utilizados
	Scrpra01A scrpra01A;
	Scrpra01B scrpra01B;
	Scrpra01Report report;
	// Includes utilizados
	// Areas globais / session
	Scrg001 scrg001;
	// Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();

	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;
	Scrpra01 scrpra01Anterior;
	String faseproc = "0";

	// private String fdc = "";
	private int cont = 0;

	private Scrpra01A preMapas() throws ParseException, JRException {
		sessao.getScrg001().setWVltw(19);
		report = new Scrpra01Report();
		sessao.getScrg001().setWProgramaw(this.getClass().getSimpleName().toUpperCase());
		scrpra01A = new Scrpra01A(true, sessao);
		scrpra01B = new Scrpra01B(true, sessao);

		report.setDataCorrente(UtilBean.obtemDataCorrente());
		report.setDataCorrente(UtilBean.inverteDataCorrente());
		for (int i1 = 1; i1 <= 150; i1++) {
			criminalView.setObservacao(i1, "");
		}
		report.setIdma("");
		return scrpra01A;
	}

	public Scrpra01(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public InputStreamDownload executar(Scrpra01A scrpra01A, Scrpra01B scrpra01B) {
		try {
			return main(scrpra01A, scrpra01B);
		} catch (Exception e) {
			ExceptionProgram excp = new ExceptionProgram();
			excp.trataErroScrcerro(e, sessao, this.getClass().getSimpleName());
		}
		return null;
	}

	private InputStreamDownload main(Scrpra01A pscrpra01A, Scrpra01B pcrpra01B) throws ParseException, JRException, FileNotFoundException {
		if (pscrpra01A == null && pcrpra01B == null) {
			primeiraVez = true;
			scrpra01A = preMapas();
			scrpra01B.setNavegar("../scrpra01/executar");
			scrpra01A.setNavegar("../scrpra01/executar");
			result.include("scrpra01A", scrpra01A);
			sessao.setAtributo("SCRPRA01", this);
			scrpra01A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return null;
		} else {
			restaurarEstados(pscrpra01A, pcrpra01B);
		}

		// RELATORIO
		// MP = 2;
		// DEFINE PRINTER(1)

		// //DEFINE PRINTER (1) OUTPUT 'XEROX01'
		// report.gravaRelatorio( 1);
		// RELATORIO

		switch (faseproc) {
		case "0": {
			scrpra01A.receberTela(false, result);
			if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
				Scrpp001 scrpp001 = new Scrpp001(result, sessao);
				scrpp001.executar(null);
				return null;
			}
			criminalView.pesquisaRegEstadualGeral((long) scrpra01A.getNumero());

			if (criminalView.registrosProcessados() == 0 || scrpra01A.getNumero() == 0) {

				faseproc = "0";
				sessao.setAtributo("SCRPRA01", this);
				result.include("scrpra01A", scrpra01A);
				scrpra01A.enviarMensagem("", "O NUMERO INFORMADO DO REGISTRO NAO FOI CADASTRADO, OU FOI DIGITADO INCORRETAMENTE,  VERIFIQUE...!");
				scrpra01A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return null;
			} else {

				scrpra01B.setNomer(scrpra01A.getNomer());
				scrpra01B.setNomei(scrpra01A.getNomei());

				scrpra01B.setId(scrpra01A.getId());
				scrpra01B.setIm(scrpra01A.getIm());
				scrpra01B.setIa(scrpra01A.getIa());
				scrpra01B.setTexto1(scrpra01A.getTexto1());
				scrpra01B.setTexto2(scrpra01A.getTexto2());
				scrpra01B.setTexto3(scrpra01A.getTexto3());
				scrpra01B.setHoraCorrente(scrpra01A.getHoraCorrente());

				scrpra01B.setNumero(criminalView.getRegEstadualGeral());
				scrpra01B.setNaturalidade(criminalView.getNaturalidade());
				String apelidoAlcunhas = "";

				for (int i = 1; i < criminalView.getApelidoAlcunhas().length; i++) {
					if (criminalView.getApelidoAlcunhas(i) != null && !criminalView.getApelidoAlcunhas(i).trim().equals("")) {
						apelidoAlcunhas = apelidoAlcunhas + " " + criminalView.getApelidoAlcunhas(i);

					}
				}

				if (!temObservacao(criminalView.getObservacao(1), criminalView.getObservacao(2), criminalView.getObservacao(3), criminalView.getObservacao(4))) {
					scrpra01B.setMensagem("NAO FOI REGISTRADA NEM UMA OCORRENCIA PARA ESTE INDIVIDUO");
				} else {
					scrpra01B.setJobservacoez(criminalView.getObservacao());
				}

			}

			// 374
			scrpra01B.setNome(criminalView.getNomeCompleto());

			scrpra01B.setJobservacoez(criminalView.getObservacao());
			scrpra01B.setFdc(UtilBean.concatena(criminalView.getPolegarDireito(), criminalView.getIndicadorDireito(), criminalView.getMedioDireito(), criminalView.getAnularDireito(), criminalView.getMinimoDireito(), criminalView.getPolegarEsquerdo(), criminalView.getIndicadorEsquerdo(), criminalView.getMedioEsquerdo(), criminalView.getAnularEsquerdo(), criminalView.getMinimoEsquerdo()));
			faseproc = "1";
			scrpra01B.setNavegar("../scrpra01/executar");
			result.include("scrpra01B", scrpra01B);
			sessao.setAtributo("SCRPRA01", this);
			scrpra01B.enviarTela(false, result, getClass().getSimpleName().toUpperCase());

			return null;
		}
		case "1": {
			scrpra01B.receberTela(false, result);
			if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
				Scrpp001 scrpp001 = new Scrpp001(result, sessao);
				scrpp001.executar(null);
				return null;
			}

			report = new Scrpra01Report();
			// RELATORIO 1 PS=67 LS=90 SG=OFF
			report.setPageSize(67);
			report.setLineSize(90);
			report.setNumero(scrpra01A.getNumero());
			// Par�grafo: ini01()
			criminalView.pesquisaRegEstadualGeral((long) report.getNumero());
			// 383
			if (criminalView.totalRegistros() == 0 || scrpra01A.getNumero() == 0) {

				scrpra01A.enviarMensagem("", "O NUMERO INFORMADO DO REGISTRO NAO FOI CADASTRADO, OU FOI DIGITADO INCORRETAMENTE,  VERIFIQUE...!");
				scrpra01A.setNavegar("../scrpra01/executar");
				result.include("scrpra01A", scrpra01A);
				sessao.setAtributo("SCRPRA01", this);
				scrpra01A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return null;

			} else {
				report.gravaRelatorio(1);
				formataRelatorio();

				report.gravaRelatorio(2);
				// RELATORIO
				report.setPageLine(report.getPageLine() + 1);
				// UtilBean.novaPagina();
				report.setPageLine(report.getPageSize());
				report.gravaRelatorio(3);

				for (int i = 1; i < 31; i++) {
					if (criminalView.getObservacao(i) != null && !criminalView.getObservacao(i).trim().equals("")) {

						report.setJobservacoez(i, criminalView.getObservacao(i));
						report.gravaRelatorio(3);
					}
				}

				// report.setJobservacoez(criminalView.getObservacao());

				report.setAaaammdd(UtilBean.inverteData(criminalView.getDataNasc()));
				report.setNome(criminalView.getNomeCompleto());

				// RELATORIO
			}
			return report.imprimir();
		}

		}

		sessao.setAtributo("SCRPRA01", this);
		result.include("scrpra01A", scrpra01A);
		if (!result.used())
			scrpra01A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
		return null;
	}

	private void restaurarEstados(Scrpra01A pscrpra01A, Scrpra01B pcrpra01B) {
		this.scrpra01Anterior = (Scrpra01) sessao.getAtributo("SCRPRA01");
		if (pscrpra01A != null) {
			scrpra01A = pscrpra01A;
			scrpra01A.setjEmpresaj(sessao.getScrg001().getWEmpresaw());
			scrpra01A.setjVersaoj(sessao.getScrg001().getWVersaow());
			scrpra01A.setjProgramaj(sessao.getScrg001().getWProgramaw());
		} else {
			scrpra01A = this.scrpra01Anterior.scrpra01A;
		}
		if (pcrpra01B != null) {
			scrpra01B = pcrpra01B;
			scrpra01B.setjEmpresaj(sessao.getScrg001().getWEmpresaw());
			scrpra01B.setjVersaoj(sessao.getScrg001().getWVersaow());
			scrpra01B.setjProgramaj(sessao.getScrg001().getWProgramaw());
		} else {
			scrpra01B = this.scrpra01Anterior.scrpra01B;
		}
		scrpra01A.setSessao(sessao);
		scrpra01B.setSessao(sessao);
		this.faseproc = this.scrpra01Anterior.faseproc;
	}

	private void formataRelatorio() throws ParseException {
		report.setAltura(criminalView.getAltura());
		report.setAnudir(criminalView.getAnularDireito());
		report.setAnuesq(criminalView.getAnularEsquerdo());
		report.setApelidoAlcunhas(criminalView.getApelidoAlcunhas(1));
		report.setAvRua(criminalView.getAvRua());
		report.setBairro(criminalView.getBairro());
		report.setCep(criminalView.getCep());
		report.setComplemento(criminalView.getComplemento());
		report.setCorCabelos(criminalView.getCodigoCorCabelo());
		report.setCorOlhos(criminalView.getCodigoCorOlhos());
		report.setCpf(criminalView.getCpf());
		report.setCutis(criminalView.getCodigoCutis());
		report.setDataAtuacao(criminalView.getDataAtuacao());
		report.setDocumApresentado(criminalView.getDocumentoApresent());
		report.setEstado(criminalView.getEstado());
		report.setEstatoCivil(criminalView.getEstadoCivil());
		report.setGrauInstrucao(criminalView.getGrauInstrucao());
		report.setInddir(criminalView.getIndicadorDireito());
		report.setIndesq(criminalView.getIndicadorEsquerdo());
		report.setMarcaPartCicatTatuag(criminalView.getMarcaPartCicatTatuag());
		report.setMeddir(criminalView.getMedioDireito());
		report.setMedesq(criminalView.getMedioEsquerdo());
		report.setMindir(criminalView.getMinimoDireito());
		report.setMinesq(criminalView.getMinimoEsquerdo());
		report.setMotivoPrisaoLei(criminalView.getMotivoPrisaoLei());
		report.setMunicipio(criminalView.getMunicipio());
		report.setMunicipioRegGeral(criminalView.getMunicipioRegGeral());
		report.setNaturalidade(criminalView.getNaturalidade());
		report.setNomeAnterior(criminalView.getNomeAnterior());
		report.setNomeDelegacia(criminalView.getNomeDelegacia());
		report.setNomeMae(criminalView.getNomeMae());
		report.setNomePai(criminalView.getNomePai());
		report.setNomeVitima(criminalView.getNomeVitima());
		report.setNumeDocumApresent(criminalView.getNumDocumentoApresent());
		report.setNumero(criminalView.getNumero());
		report.setNumeroAutos(criminalView.getNumeroAutos());
		report.setOrgaoExpUf(criminalView.getOrgaoExpUfUfUf());
		report.setPoldir(criminalView.getPolegarDireito());
		report.setPolesq(criminalView.getPolegarEsquerdo());
		report.setProfissao(criminalView.getProfissao());
		report.setRegistroEstadualGeral(criminalView.getRegEstadualGeral());
		report.setRegistroFederalCi(criminalView.getRegFederalCi());
		report.setSexo(criminalView.getSexo());
		report.setTipoCabelos(criminalView.getCodigoTipoCabelo());
		report.setUfNaturalidade(criminalView.getUfNaturalidade());
		report.setUfRegEstadualGeral(criminalView.getUfRegEstadualGeral());
		report.setHoraCorrente(scrpra01A.getHoraCorrente());
		report.setId(scrpra01A.getId());
		report.setIm(scrpra01A.getIm());
		report.setIa(scrpra01A.getIa());
		report.setNomeR(scrpra01A.getNomer());
		report.setNomeI(scrpra01A.getNomei());
		report.setTexto3(scrpra01A.getTexto3());
		report.setNomeClasse(scrpra01A.getNomeClasse());
	}

	private boolean temObservacao(String... valores) {
		boolean valido = false;
		for (String valor : valores) {
			if (valor != null && !valor.trim().isEmpty()) {
				valido = true;
			}
		}
		return valido;
	}
}
